HMaster服务异常提示Cannot seek after EOF

本文介绍HBase出现HMaster服务异常的解决方案。

具体报错

HBase 2.3.4版本的HMaster一直重启失败,错误日志如下所示。

java.io.EOFException: Cannot seek after EOF
    at org.apache.hadoop.hdfs.DFSInputStream.seek(DFSInputStream.java:1447)
    at org.apache.hadoop.fs.FSDataInputStream.seek(FSDataInputStream.java:65)
    at org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.initInternal(ProtobufLogReader.java:211)
    at org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.initReader(ProtobufLogReader.java:173)

问题原因

HMaster在启动时遇到recovery的wal文件为空(即文件长度为0),出现了异常,并导致HMaster启动失败。该问题出现的概率较小。

对应社区的Issue:WAL replay should ignore 0-length files

影响范围

受影响的HBase版本为2.3.4,对应的EMR集群版本:

  • EMR-5.6.0之前版本

  • EMR-4.8.0至EMR-4.10.0版本(均包含)

解决方法

说明

替换前请备份好JAR文件。

  1. 下载hbase-server-2.3.4.jar,并替换HBase集群header节点上对应的JAR文件。

    JAR文件在/usr/lib/hbase-current/lib/目录下。

  2. 重启HMaster。

    在EMR控制台HBase服务的状态页面,单击HMaster操作列的重启